package codeRandomThoughts.Test98验证二叉搜索树;

import codeRandomThoughts.utils.TreeNode;

/**
 * 别人的代码
 */
public class Solution2 {
    public boolean isValidBST(TreeNode root) {
        return validate(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    /**
     * 相当于简化了二叉搜索树的判定条件
     * 节点的左子树只包含小于当前节点的数
     * 节点的右子树只包含大于当前节点的数
     * @param node
     * @param min 往右走,节点的值不能小于子节点的值
     * @param max 往左走,节点的值不能大于父节点的值
     * @return
     */
    public boolean validate(TreeNode node, long min, long max) {
        if (node == null) {
            return true;
        }
        if (node.val <= min || node.val >= max) {
            return false;
        }
        return  validate(node.left, min, node.val) && validate(node.right, node.val, max);
    }
}
